const { app, BrowserWindow, ipcMain, Tray, Menu } = require('electron')
const path = require('path')
const i18next = require('i18next')
const Backend = require('i18next-fs-backend')
const isDev = process.env.NODE_ENV === 'development'
const { autoUpdater } = require('electron-updater')

// 初始化 i18next
i18next.use(Backend).init({
  lng: 'zh',
  fallbackLng: 'zh',
  backend: {
    loadPath: path.join(__dirname, 'locales/zh.json'),
  },
})

// 全局主窗口变量
let mainWindow

// 自动更新
autoUpdater.autoDownload = true
autoUpdater.autoInstallOnAppQuit = true

// 更新事件处理
autoUpdater.on('update-available', (info) => {
  mainWindow.loadFile(path.join(__dirname, 'assets/update.html'))
  mainWindow.webContents.send('update-available', {
    currentVersion: app.getVersion(),
    version: info.version,
    releaseNotes: info.releaseNotes,
  })
})

autoUpdater.on('update-downloaded', () => {
  mainWindow.webContents.send('update-downloaded')
})

ipcMain.on('restart-app', () => {
  autoUpdater.quitAndInstall()
})

// 创建主窗口
function createWindow() {
  mainWindow = new BrowserWindow({
    width: 1200,
    height: 800,
    webPreferences: {
      nodeIntegration: false,
      contextIsolation: true,
      preload: path.join(__dirname, 'preload.js'),
    },
    title: i18next.t('app.title'),
    icon: path.join(__dirname, 'assets/icon.png'),
    frame: false, // 自定义窗口边框
    titleBarStyle: 'hidden',
    titleBarOverlay: {
      color: '#2f3241',
      symbolColor: '#74b1be',
    },
  })

  // 窗口控制
  ipcMain.on('window:minimize', () => {
    mainWindow.minimize()
  })

  ipcMain.on('window:maximize', () => {
    if (mainWindow.isMaximized()) {
      mainWindow.unmaximize()
    } else {
      mainWindow.maximize()
    }
  })

  ipcMain.on('window:close', () => {
    mainWindow.close()
  })

  // 窗口状态同步
  ipcMain.handle('window:getState', () => {
    return {
      isMaximized: mainWindow.isMaximized(),
      isMinimized: mainWindow.isMinimized(),
      isFullScreen: mainWindow.isFullScreen(),
    }
  })

  // 系统托盘
  let tray = null
  const createTray = () => {
    let iconPath = path.join(__dirname, 'assets', 'icon.png')

    try {
      tray = new Tray(iconPath)
    } catch (error) {
      console.error(i18next.t('error.iconLoadFailed'), error)
      // 使用默认图标
      tray = new Tray(path.join(__dirname, 'assets', 'icon.ico'))
    }

    const contextMenu = Menu.buildFromTemplate([
      {
        label: i18next.t('app.tray.open'),
        click: () => mainWindow.show(),
      },
      {
        label: i18next.t('app.tray.quit'),
        click: () => app.quit(),
      },
    ])
    tray.setToolTip(i18next.t('app.tray.tooltip'))
    tray.setContextMenu(contextMenu)
  }

  createTray()

  // 窗口最小化到托盘
  mainWindow.on('minimize', (event) => {
    event.preventDefault()
    mainWindow.hide()
  })

  // 双击托盘图标显示窗口
  tray.on('double-click', () => {
    mainWindow.show()
  })

  // 始终指向开发服务器
  mainWindow.loadURL('http://localhost:3000')

  // 开发模式下打开开发者工具
  if (process.env.NODE_ENV === 'development') {
    mainWindow.webContents.openDevTools()
  }
}

// 应用准备就绪时创建窗口
app.whenReady().then(() => {
  createWindow()

  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow()
    }
  })
})

// 所有窗口关闭时退出应用（macOS除外）
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})
